// user模块后期自己写
import { reqLogin, reqGetUserInfo, reqGetUserProfile } from '@/api/user'
import { setToken, getToken, removeToken } from '@/utils/auth'
import { resetRouter } from '@/router'
export default {
  state: {
    // 取token
    token: getToken() || null,
    userInfo: {} // 个人基本资料
  },
  mutations: {
    setToken(state, token) {
      state.token = token
      // 存储到cookie中
      setToken(token)
    },
    // 设置个人信息的mutation
    setUserInfo(state, userInfo) {
      state.userInfo = userInfo
    },
    // 清除个人信息
    removeUserInfo(state) {
      state.userInfo = {}
    },
    // 清除token信息
    removeToken(state) {
      state.token = null
      removeToken()
    }
  },
  // action中可以包含任何异步操作
  // action提交的是mutation,而不是直接变更状态
  actions: {
    // 在action中发送一个请求,提交一个mutation
    // 改造登录action为async和await的方式
    async login(context, data) {
      const res = await reqLogin(data)
      context.commit('setToken', res.data)
      return res
    },
    // 获取个人资料到的action
    async getUserInfo({ commit }) {
      console.log(111111)
      const { data: res1 } = await reqGetUserInfo()
      const { data: res2 } = await reqGetUserProfile(res1.userId)
      const obj = { ...res1, ...res2 }
      // 将个人信息资料存储在仓库中,共享给各个组件
      // console.log('获取个人资料完成')
      commit('setUserInfo', obj)
      return obj // --挖个坑先注释 如果别的地方要用这个action返回的结果,必须return
    },
    // 清除个人信息和个人tokenaction
    logout({ commit }) {
      commit('removeUserInfo') // 移除个人信息的
      commit('removeToken') // 移除token的
      // 重置路由
      resetRouter()
      // 移除用户动态路由的
      // 提交permission模块下的setRoutes的action { root: true } 在全局找到对应的模块提交对应模块的mutation
      commit('permission/setRoutes', [], { root: true })
      // 移除主题色 vuex中(和本地存储的主题色都要清除) 只需要触发action
      // dispatch('settings/changeSetting', null, { root: true })
      // 单独定义一个移除的mutation  null 不能省  参数3{ root: true }的位置
      commit('settings/resetTheme', null, { root: true })
    }
  },
  // 开启命名空间
  namespaced: true
}
